package com.rlz.libs.log;


import android.text.TextUtils;
import android.util.Log;

import com.rlz.libs.BuildConfig;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Log 打印工具
 */
public final class P {

    public static final String TAG = "LOG_PRINT";

    public final static boolean IS_PRINT = TextUtils.equals(getPrint(), "1") || BuildConfig.DEBUG;

    private P() {
    }


    public static int i(Object o) {
        return IS_PRINT && o != null ? android.util.Log.i(TAG, o.toString()) : -1;
    }

    private static String getPrint() {
        try {
            Process process = Runtime.getRuntime().exec("getprop debug.log");
            InputStreamReader ir = new InputStreamReader(process.getInputStream());
            BufferedReader input = new BufferedReader(ir);
            String logTag;
            if ((logTag = input.readLine()) != null) {
                Log.i(TAG, "debug.log = " + logTag);
                return logTag;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return "0";
        }
        return "0";
    }


    /**
     * ******************** Log **************************
     */
    public static int v(String msg) {
        return IS_PRINT && msg != null ? android.util.Log.v(TAG, msg) : -1;
    }

    public static int d(String msg) {
        return IS_PRINT && msg != null ? android.util.Log.d(TAG, msg) : -1;
    }

    public static int i(String msg) {
        return IS_PRINT && msg != null ? android.util.Log.i(TAG, msg) : -1;
    }

    public static int w(String msg) {
        return IS_PRINT && msg != null ? android.util.Log.w(TAG, msg) : -1;
    }

    public static int e(String msg) {
        return IS_PRINT && msg != null ? android.util.Log.e(TAG, msg) : -1;
    }

    /**
     * ******************** Log with object list **************************
     */
    public static int v(Object... msg) {
        return IS_PRINT ? android.util.Log.v(TAG, getLogMessage(msg)) : -1;
    }

    public static int d(Object... msg) {
        return IS_PRINT ? android.util.Log.d(TAG, getLogMessage(msg)) : -1;
    }

    public static int i(Object... msg) {
        return IS_PRINT ? android.util.Log.i(TAG, getLogMessage(msg)) : -1;
    }

    public static int w(Object... msg) {
        return IS_PRINT ? android.util.Log.w(TAG, getLogMessage(msg)) : -1;
    }

    public static int e(Object... msg) {
        return IS_PRINT ? android.util.Log.e(TAG, getLogMessage(msg)) : -1;
    }

    private static String getLogMessage(Object... msg) {
        if (msg != null && msg.length > 0) {
            StringBuilder sb = new StringBuilder();
            for (Object s : msg) {
                if (msg != null && s != null) {
                    sb.append(s.toString());
                }
            }
            return sb.toString();
        }
        return "";
    }

    /**
     * ******************** Log with Throwable **************************
     */
    public static int v(String msg, Throwable tr) {
        return IS_PRINT && msg != null ? android.util.Log.v(TAG, msg, tr) : -1;
    }

    public static int d(String msg, Throwable tr) {
        return IS_PRINT && msg != null ? android.util.Log.d(TAG, msg, tr) : -1;
    }

    public static int i(String msg, Throwable tr) {
        return IS_PRINT && msg != null ? android.util.Log.i(TAG, msg, tr) : -1;
    }

    public static int w(String msg, Throwable tr) {
        return IS_PRINT && msg != null ? android.util.Log.w(TAG, msg, tr) : -1;
    }

    public static int e(String msg, Throwable tr) {
        return IS_PRINT && msg != null ? android.util.Log.e(TAG, msg, tr) : -1;
    }

    /**
     * ******************** TAG use Object TopicModel **************************
     */
    public static int v(Object tag, String msg) {
        return IS_PRINT ? android.util.Log.v(tag.getClass().getSimpleName(), msg) : -1;
    }

    public static int d(Object tag, String msg) {
        return IS_PRINT ? android.util.Log.d(tag.getClass().getSimpleName(), msg) : -1;
    }

    public static int i(Object tag, String msg) {
        return IS_PRINT ? android.util.Log.i(tag.getClass().getSimpleName(), msg) : -1;
    }

    public static int w(Object tag, String msg) {
        return IS_PRINT ? android.util.Log.w(tag.getClass().getSimpleName(), msg) : -1;
    }

    public static int e(Object tag, String msg) {
        return IS_PRINT ? android.util.Log.e(tag.getClass().getSimpleName(), msg) : -1;
    }


    /**
     * ******************** TAG use String TopicModel **************************
     */
    public static int v(String tag, String msg) {
        return IS_PRINT ? android.util.Log.v(tag, msg) : -1;
    }

    public static int d(String tag, String msg) {
        return IS_PRINT ? android.util.Log.d(tag, msg) : -1;
    }

    public static int i(String tag, String msg) {
        return IS_PRINT ? android.util.Log.i(tag, msg) : -1;
    }

    public static int w(String tag, String msg) {
        return IS_PRINT ? android.util.Log.w(tag, msg) : -1;
    }

    public static int e(String tag, String msg) {
        return IS_PRINT ? android.util.Log.e(tag, msg) : -1;
    }
}
